package com.joker.demo.admin.domain.po;

import com.baomidou.mybatisplus.annotation.TableName;
import com.joker.demo.core.domain.enums.JobBlockStrategyEnum;
import com.joker.demo.core.domain.enums.JobMisfireStrategyEnum;
import com.joker.demo.core.domain.enums.JobRoutePolicyEnum;
import com.joker.demo.core.domain.enums.JobSchedulingTypeEnum;
import com.joker.demo.core.domain.enums.JobStatusEnum;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.util.Date;

/**
 * 任务信息实体类
 *
 * @author feixiang.li
 * @since 2025/7/23
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("t_job_info")
public class JobInfoPO extends BaseEntity {


    /**
     * 应用名称-所属应用。对应项目application.name
     */
    private String groupName;

    /**
     * 任务名称-job名称
     */
    private String jobName;

    /**
     * groupName + jobName 组合唯一标识
     */
    private String groupJobName;

    /**
     * 任务描述
     */
    private String jobDesc;

    /**
     * CRON表达式
     */
    private String cronExpression;

    /**
     * 调度类型(CRON/FIX_RATE/FIX_DELAY)
     * 手动调动/cron表达式/固定频率/固定延迟
     * 目前只支持，手动调度/cron表达式
     * {@link JobSchedulingTypeEnum}
     */
    private Integer scheduleType;

    /**
     * 分片参数
     * json数组格式。如果不存在,则创建1个任务，否则根据分片参数创建多个任务。
     */
    private String shardingParams;

    /**
     * 是否支持任务分片参数
     * 0: 不支持分片参数 1支持分片参数
     */
    private Integer sharding;

    /**
     * 调度过期策略(IGNORE/FIRE_ONCE)
     * {@link JobMisfireStrategyEnum}
     */
    private Integer misfireStrategy;

    /**
     * 路由策略
     * {@link JobRoutePolicyEnum}
     */
    private Integer routeStrategy;

    /**
     * 阻塞处理策略
     * {@link JobBlockStrategyEnum}
     */
    private Integer blockStrategy;

    /**
     * 失败重试次数
     */
    private Integer retryCount;

    /**
     * 超时时间(秒)
     */
    private Integer timeout;

    /**
     * 状态: 就绪/异常。
     * 当有机器上线的时候，就会更新为就绪状态。若没有机器上线，则任务状态为异常。
     * {@link JobStatusEnum}
     */
    private Integer triggerStatus;

    /**
     * 报警邮箱
     */
    private String alarmEmail;


    /**
     * 下次触发时间
     */
    private Date nextTriggerTime;

    /**
     * 上次触发时间
     */
    private Date lastTriggerTime;
} 